import { defineStore } from 'pinia'

export const useHistoryStore = defineStore('history', {
  state: () => ({
    // 历史记录栈
    undoStack: [],
    // 重做栈
    redoStack: [],
    // 最大历史记录数
    maxHistory: 50
  }),

  getters: {
    // 是否可以撤销
    canUndo: (state) => state.undoStack.length > 0,
    // 是否可以重做
    canRedo: (state) => state.redoStack.length > 0
  },

  actions: {
    // 添加历史记录
    pushHistory(state) {
      // 保存当前状态的深拷贝
      this.undoStack.push(JSON.parse(JSON.stringify(state)))
      
      // 清空重做栈
      this.redoStack = []
      
      // 限制历史记录数量
      if (this.undoStack.length > this.maxHistory) {
        this.undoStack.shift()
      }
    },

    // 撤销操作
    undo() {
      if (!this.canUndo) return null
      
      // 获取上一个状态
      const prevState = this.undoStack.pop()
      
      // 将当前状态推入重做栈
      if (this.currentState) {
        this.redoStack.push(this.currentState)
      }
      
      return prevState
    },

    // 重做操作
    redo() {
      if (!this.canRedo) return null
      
      // 获取下一个状态
      const nextState = this.redoStack.pop()
      
      // 将当前状态推入撤销栈
      if (this.currentState) {
        this.undoStack.push(this.currentState)
      }
      
      return nextState
    },

    // 清空历史记录
    clearHistory() {
      this.undoStack = []
      this.redoStack = []
    },

    // 设置当前状态
    setCurrentState(state) {
      this.currentState = JSON.parse(JSON.stringify(state))
    }
  }
}) 